题目:https://github.com/giantbranch/CTF_PWN/tree/master/2018/tie3/littlenote
保护方式:保护全开
1 | [*] '/root/ctf201812/littlenote' |
漏洞点1:free的时候堆空间没有置0,全局note数组也没有置0
1 | unsigned __int64 freenote() |
上面全局note数组也没有置0,就导致可以free了之后还可以show,也即uaf
1 | unsigned __int64 shownote() |
还有一个是add的代码,那个N的分支好像没什么用
1 | unsigned __int64 addnote() |
要点
1、任意地址写:fastbin 的uaf
2、泄露堆地址:fastbin的free
3、泄露libc地址:非fastbin的free,如smallbin
4、堆溢出:fastbin的uaf可以在当前堆块伪造同样大小的size之后就可以溢出下一个堆块的size了,从而构造smallbin大小,
5、free smallbin大小的注意下一块堆块对应的位置的size大小
exp
1 | #!/usr/bin/env python |